package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.*;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.AuthTreeCheckIdsVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.RoleAuthButtonVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.RoleAuthVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.RoleManageVO;
import org.springframework.http.HttpHeaders;

/**
 * 平台后台 - 角色权限管理服务接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-10-23
 */
public interface IPlatformRoleManageService {
    /**
     * 根据名称，模糊、分页查询角色列表
     * @param headers Http头部信息
     * @param pageVO  接口参数
     * @return 查询结果
     */
    Wrapper<PageData<RoleManageVO>> pageRoles(HttpHeaders headers, PageRoleByNameVO pageVO);

    /**
     * 查询角色权限，以树形菜单形式返回
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<RoleAuthVO> treeRoleAuth(HttpHeaders headers, RoleIdVO idVO);

    /**
     * 查询左侧树形菜单勾选的Id列表
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<AuthTreeCheckIdsVO> getTreeMenuCheckIds(HttpHeaders headers, RoleIdVO idVO);

    /**
     * 根据左侧菜单Id，查询右侧按钮列表
     * @param headers Http头部信息
     * @param getButtonVO 接口参数
     * @return 操作结果
     */
    Wrapper<RoleAuthButtonVO> getRoleAuthButtons(HttpHeaders headers, RoleGetButtonVO getButtonVO);


    /**
     * 根据左侧菜单Id，查询右侧按钮列表勾选的Id列表
     * @param headers Http头部信息
     * @param buttonVO 接口参数
     * @return 操作结果
     */
    Wrapper<AuthTreeCheckIdsVO> getTreeButtonCheckIds(HttpHeaders headers, RoleGetButtonVO buttonVO);


    /**
     * 更新角色左侧菜单权限
     * @param headers Http头部信息
     * @param updateMenuVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateRoleMenus(HttpHeaders headers, RoleUpdateMenuVO updateMenuVO);


    /**
     * 更新角色左侧菜单关联的右侧按钮列表
     * @param headers Http头部信息
     * @param updateMenuButtonVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateRoleMenuButtons(HttpHeaders headers, RoleUpdateMenuButtonVO updateMenuButtonVO);

    /**
     * 修改角色状态
     * @param headers Http头部信息
     * @param statusVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateRoleStatus(HttpHeaders headers, RoleUpdateStatusVO statusVO);
}
